(function ($) {
    // 首先备份下jquery的ajax方法
    var _ajax = $.ajax;

    // 重写jquery的ajax方法
    $.ajax = function (options) {
        options.dataType = 'json';
        options.xhrFields = {withCredentials: true};
        var post_flag = true;
        // alert(options.url);
        // 备份opt中error和success方法
        var callback = {
            "beforeSend": function (XHR) {
            },
            "complete": function (XHR, TS) {
            },
            "error": function (XMLHttpRequest, textStatus, errorThrown) {
            },
            "success": function (data, textStatus) {
            }
        }

        // 判断参数中是否有beforeSend回调函数
        if (options.beforeSend) {
            callback.beforeSend = options.beforeSend;
        }

        // 判断参数中是否有complete回调函数
        if (options.complete) {
            callback.complete = options.complete;
        }

        // 判断参数中是否有error回调函数
        if (options.error) {
            callback.error = options.error;
        }

        // 判断参数中是否有success回调函数
        if (options.success) {
            callback.success = options.success;
        }

        // 扩展增强处理
        var _opt = $.extend(options, {
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                // 错误方法增强处理
                callback.error(XMLHttpRequest, textStatus, errorThrown);
                if (XMLHttpRequest.status == 403) {
                    window.location.href = "http://127.0.0.1:8890/error403";
                }
                // if (XMLHttpRequest.status == 401) {
                //     alert("用户名或密码错误!");
                // }
            },
            success: function (data, textStatus) {
                // 成功回调方法增强处理
                callback.success(data, textStatus);
            },
            beforeSend: function (XHR) {
                var token = getCookie("XSRF-TOKEN");
                var token2 = getCookie("X-XSRF-TOKEN");
                console.log(token);
                console.log(token2);
                if (!post_flag) return;
                // 提交前回调方法
                callback.beforeSend(XHR);
            },
            complete: function (XHR, TS) {
                post_flag = false;
                // 请求完成后回调函数 (请求成功或失败之后均调用)。
                callback.complete(XHR, TS);
            }
        });

        // 返回重写的ajax
        return _ajax(_opt);
    };
})(jQuery);

function getCookie(cname){
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for(var i=0; i<ca.length; i++) {
        var c = ca[i].trim();
        if (c.indexOf(name)==0) { return c.substring(name.length,c.length); }
    }
    return "";
}